#include <bits/stdc++.h>
#define int long long 
using namespace std;

const int maxn = 105;
bitset<100005> b; 
int n, s;

void solve(){
	cin >> n;
	int t;
	b[0] = 1; // 表示 0 这个位置可以到达
	for (int i=1;i<=n;i++) {
		cin >> t;
		// 比如原本 可以到达 1 6 9 18 39, 此时出现了 x, 比如 10, 那么除了可以到达之前的地方, 也可以到达 11 16 19 28 49
		// 用代码表达出来就是, 使用 << 得到新的, 然后使用 |  将新的加上去, 
		b = b | (b << t); 
		s += t;
	}
	int ans = 1e5;
	for (int i=0;i<=1e5;i++) {
		if (b[i]) { // 能凑出 i
			// 找出使得时间最短的结果, 即 两个洗车的时间差距最小
			ans = min(ans, max(i, s-i));
		}
	}
	cout << ans << '\n';
}

signed main(){
	ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);
	solve();
	return 0;
}
